A typical magnetic disk drive includes, among other things, (i) magnetic platters (i.e., disks) which rotate about a common spindle, and (ii) heads which write information to and read information from the magnetic platter surfaces. Over time, the possibility exists that such a magnetic disk drive suffers a failure due to the heads hovering over the same areas on the platter surfaces for a long period of time. To avoid such a failure, some conventional disk drives periodically move their heads to different tracks (e.g., every 15 seconds) so that the heads do not sit over the same areas on the platter surfaces for very long. This type of operation is commonly known as “wear leveling”.
A similar dilemma and resolution exists with flash memory. That is, flash memory cells can only be put through a finite number of erase cycles before wearing out and becoming statistically unreliable (e.g., after 1,000,000 write cycles). To prevent only a section of a flash memory card from wearing out and rendering the entire flash memory card in need of replacement, wear leveling is commonly applied to flash memory cards as well.
One conventional scheme to wear leveling flash memory involves writing to unused or rarely used sections of flash memory before re-writing to often-used sections of the flash memory. That is, when a flash memory controller on a flash memory card writes information to the flash memory on the card, the controller identifies a group of blocks from an unused block pool and writes the information to that group of blocks. If the controller then needs to update that information, the controller (i) identifies a new group of blocks from the unused block pool and writes the information to that new group of blocks, and (ii) erases the initial group of blocks and returns the initial group of blocks to the unused block pool. On occasion, the flash memory controller may recognize a group of blocks which contain data that has not been modified often and move this unmodified data to a more worn-out block and place the initial lightly worn block into the unused block pool. Accordingly, the controller carries out wear leveling on the flash memory of the flash memory card thus evenly distributing erase operations across the entire flash memory.